package main

import (
	"fmt"
	"time"
)

// python java c++是多线程编程
// go 语言诞生的比较晚 web2.0开发逐渐主流 高并发
// 多线程-每个线程占用的内存比较多，而且系统切换开销大，上千个 协程- 绿程/轻量级线程 是用户态的线程
// go 语言一开始就没有打算让我们取实例一个线程--直接用的协程 go语言没有历史包袱
// nodejs python3.6 才开始支持协程 为什么go协程那么火 其他语言都是两种模式 多线程和多进程并发 使用协程并发编程 很多库是基于多线程和多进程并发开发的
// 除非所有的库都支持协程

func main() {
	for i := 0; i < 1000; i++ {
		// 闭包特性 不能直接在协程里使用外部变量，不能用匿名函数，要把i当参数传入
		go func(i int) {
			for {
				fmt.Println(i)
				time.Sleep(time.Second)
			}
		}(i)
	}
	//为什么会只输出 imooc呢，主死从随，主协程关了，子协程也会被关掉
	time.Sleep(time.Second * 2)
	// fmt.Println("imooc")
}
